package me.mingshan.algorithm.interview;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 给定一个字符串，该字符串由 @ 分成两部分。@前的部分表示可以使用的字母及其数量。
 *
 * @author hanjuntao
 * @ 后的部分表示已经被使用的字母及使用的数量。
 * 你需要按原字符串的顺序输出剩余的可使用字母及其剩余数量。 例：输入：a3b2c1@a1c1 输出：a2b2
 * @date 2025/7/1 0001
 */
public class CountAtUse {

    public static void main(String[] args) {
        String str = "a3b2c1@a1c1";

        System.out.println(getResult(str));
    }

    public static String getResult(String str) {
        StringBuilder sb = new StringBuilder();

        String[] split = str.split("@");
        String available = split[0];
        String used = split[1];

        Map<Character, Integer> availableMap = new LinkedHashMap<>();

        for (int i = 0; i < available.length(); i++) {
            // 代表字符串中是字母
            if (i % 2 == 0) {
                char c = available.charAt(i);
                char c1 = available.charAt(i + 1);
                int value = Integer.parseInt(c1 + "");
                availableMap.put(c, value);
            }
        }

        for (int i = 0; i < used.length(); i++) {
            // 代表字符串中是字母
            if (i % 2 == 0) {
                char c = used.charAt(i);
                char c1 = used.charAt(i + 1);
                int usedCount = Integer.parseInt(c1 + "");
                if (availableMap.containsKey(c)) {
                    int totalCount = availableMap.get(c);
                    totalCount = totalCount - usedCount;
                    availableMap.put(c, totalCount);
                }
            }
        }

        for (Map.Entry<Character, Integer> entry : availableMap.entrySet()) {
            sb.append(entry.getKey());
            sb.append(entry.getValue());
        }

        return sb.toString();
    }
}
